package com.cqjtu.eecs.service;

import com.cqjtu.eecs.entity.Permission;
import com.cqjtu.eecs.entity.Role;
import com.cqjtu.eecs.entity.User;
import com.baomidou.mybatisplus.extension.service.IService;
import com.cqjtu.eecs.entity.dto.CurrUserInfo;
import com.cqjtu.eecs.entity.params.user.UserParams;
import com.cqjtu.eecs.entity.vo.UserVO;
import org.springframework.security.core.GrantedAuthority;

import java.util.List;
import java.util.Set;

/**
 * <p>
 * 用户 服务类
 * </p>
 *
 * @author luojun
 * @since 2022-03-04
 */
public interface IUserService extends IService<User> {
    // 通过uid获取用户角色
    List<Role> listRoleByUid(Integer uid);
    // 通过uid获取用户权限
    List<Permission> listPermissionByUid(Integer uid);
    // 注册新用户
    boolean saveUser(UserParams userParams);

    // 分页获取用户信息
    UserVO listUserByPage(Long page, Long pageSize);
    // 分页模糊查询
    UserVO listUserPageByName(Long page, Long pageSize, String name);
    // 获取用户角色
    List<String> listRoleByName(String name);
    // 修改用户的角色
    boolean updateUserRole(String name,List<String> roles);
    // 获取用户的权限集合
    Set<GrantedAuthority> listUserPermissionSet(Integer uid);
    User selectUserByStudentCode(String studentCode);
    // 为某个用户添加某个角色
    boolean addRoleToUser(Integer uid, String roleName);

    /**
     * 获取当前登录用户信息
     * @param name
     * @return
     */
    CurrUserInfo getCurrentUserInfo(String name);
    // 根据用户名和角色名删除用户的某个角色
    Boolean removeRoleByUsername(String username, String roleName);
    // 判断某个用户是否拥有某个角色
    Boolean hasRole(String username, String roleName);
}
